﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CreditCalculator_1
{
    class Program
    {
        public static DateTime DatetimePlusOneWeek(DateTime d)
        {
            DateTime c = d.AddDays(7);
            return c;
        }
        public static DateTime DatetimePlusOneMonth(DateTime d)
        {
           DateTime c = d.AddMonths(1);
           return c;
        }
        public static void PrintCalculation(DateTime d, int InstallmentType, int Term, int Principal, int Percent, int Body, int PercentSum, int i, int PeriodPercentSum, int PrincipalWithPercent)
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Дата "+ i +" платежа: "+ d.ToShortDateString());
            Console.WriteLine("Сумма платежа по телу кредита составляет " + Body);
            Console.WriteLine("Погашение процента составляет " + PeriodPercentSum);
            Console.WriteLine("Итого к оплате " + (Body + PeriodPercentSum));
            Console.WriteLine("Остаток задолженности: " + PrincipalWithPercent);

        }
        public static void Calculation(DateTime d, int InstallmentType, int Term, int Principal, int Percent)
        {
            int Body = Principal / Term;
            int PercentSum = (Principal / 100) * Percent;
            int PrincipalWithPercent = Principal + PercentSum;
            int PeriodPercentSum = (PrincipalWithPercent / Term) - Body;
            for (int i = 1; i <= Term; i++)
            {
                PrincipalWithPercent -= Body;
                PrincipalWithPercent -= PeriodPercentSum;
                PrintCalculation(d, InstallmentType, Term, Principal, Percent, Body, PercentSum, i, PeriodPercentSum, PrincipalWithPercent);
                if (InstallmentType == 1)
                {
                    d = DatetimePlusOneMonth(d);
                }
                else if (InstallmentType == 2)
                {
                    d = DatetimePlusOneWeek(d);
                }

            }
        }
        public static int CheckInstallmentTypeValid()
        {
            int InstallmentType = ReadIntFromConsole();
            if (InstallmentType == 1 || InstallmentType == 2)
            {
                return InstallmentType;
            }
            else
            {
                int errorCode = 2;
                WriteException(errorCode);
                return CheckInstallmentTypeValid();
            }
        }
        public static int ReadIntFromConsole()
        {
            string ast = Console.ReadLine();
            int a;
            bool ab = int.TryParse(ast, out a);
            if (ab)
            {
                return a;
            }
            else
            {
                int errorCode = 1;
                WriteException(errorCode);
                return ReadIntFromConsole();
            }
        }
        public static void WriteException(int errorCode)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            if (errorCode == 1)
            {
                Console.WriteLine("Извините, но это не число. \r\nЛибо введённое число превышает предел допустимых значений. Повторите ввод!");
            }
            else if (errorCode == 2)
            {
                Console.WriteLine("Выбрана неверная опция. Повторите ввод!");
            }
            else
            {
                Console.WriteLine("Неизвестный код ошибки!");
            }
            Console.ResetColor();
        }
        public static void PrintWelcomeMessage()
        {
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.WriteLine("Кредитный калькулятор");
            Console.ResetColor();
            Console.WriteLine(Environment.NewLine);
        }
        public static DateTime StartDatetime()
        {
            DateTime d = DateTime.Now;
            return d;
        }
        static void Main(string[] args)
        {
            PrintWelcomeMessage();
            DateTime d = StartDatetime();
            Console.WriteLine("Выберите тип платежа (1 - помесячный, 2 - понедельный):");
            int InstallmentType = CheckInstallmentTypeValid();
            Console.WriteLine("Введите срок (Количество месяцов или недель):");
            int Term = ReadIntFromConsole();
            Console.WriteLine("Введите сумму:");
            int Principal = ReadIntFromConsole();
            Console.WriteLine("Введите процент:");
            int Percent = ReadIntFromConsole();

            Calculation(d, InstallmentType, Term, Principal, Percent);
        }
    }
}
